#include<iostream>
#include<string>
using namespace std;

/*模板----函数模板
1.含义：把数据类型作为参数；
2.写法：template< typename/class T >
		返回类型 函数名(参数){函数体}
	注：T--->模板参数--->接收int/double等数据类型
		a,b--->普通参数
	e.g template<typename T>
		T add(T a, T b){return a + b;}
3.调用：数据类型名不需要显示传递，系统会自动检测
		即调用时写为 add(x, y); 而不用写为 add(int x, int y);
4.模板参数可以一个或多个;
5.函数模板的参数可以是模板参数，也可以是基本数据类型参数。
*/

/*template<typename T, typename G>
double add(T a, G b){return a + b;}

int main()
{
	int a = 3, b = 4;
	double c = 3.4, d = 4.6;
	cout << add(a, b) << endl;//T-->int G-->int
	cout << add(c, d) << endl;//T-->double G-->double
	cout << add(a, c) << endl;//T-->int G-->double
	cout << add(d, b) << endl;//T-->double G-->int
	
	return 0;
}*/

/*template<typename T>
T add(T t[], int n){
	T sum = 0;
	int i = 0;
	for(i = 0; i < n;i++)
	{
		sum += t[i];
	}
	return sum;
}

int main()
{
	int a[3] = { 3,5,7 };
	double b[2] = {3.5, 4.8};
	cout << add(a, 3) << endl;
	cout << add(b, 2) << endl;
	return 0;
}*/

/*class Dog{
public:
	void cry(){cout << "汪汪" <<endl;}
};
class Cat{
public:
	void cry(){cout << "喵喵" <<endl;}
};

template<typename T>
void Animalcry( T animal ){
	animal.cry();
}

int main()
{
	Dog hongbao;
	Cat Tom;
	
	Animalcry(hongbao);
	Animalcry(Tom);
	return 0;
}*/

//用函数模板求数组的最大值
/*template<typename T>
T MAX(T a[], int n){
    T max;
	int i = 0;
	for(i = 0; i < n - 1; i++)
	{
		if(a[i] > a[i + 1])
			max = a[i];
		else
			max = a[i + 1];
	}
	return max;
}

int main()
{
	int a[4] = { 5, 1, 2, 6 };
	double b[3] = { 2.3, 8.6, 4.5 };
	string c[3] = {"beijing", "houdoumen", "guangzhou"};
	
	cout << MAX(a, 4) << endl;
	cout << MAX(b, 3) << endl;
	cout << MAX(c, 3) << endl;
	
	return 0;
}*/


